package com.tomato.thread.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author tomato
 */
public class FixThreadPoolOOM {
    public static void main(String[] args) {
        // 为了更好的测试，这里将核心线程数设置为1
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        for(int i = 1; i < Integer.MAX_VALUE; i++) {
            // 往线程池中添加n个任务
            executorService.execute(() -> {
                try {
                    // 这里休眠50s是为了模拟耗时操作
                    // 当核心在执行该任务时，其他任务没有线程去被执行就只能先存储在队列中
                    // 如果队列中元素过多肯定会报oom
                    Thread.sleep(10_000);
                    System.out.println(Thread.currentThread().getName());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
    }
}
